#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

// int main() {
//     // 将权限掩码设置为全0
//     umask(0);
//     // open函数使用权限掩码的原则：就近原则
//     // 代码中设置了权限掩码，则使用代码中设置的
//     // 代码中未设置，则使用系统的
//     int fd = open("log.txt", O_WRONLY | O_CREAT, 0666);
//     if (fd < 0) {
//         perror("open:");
//         return 1;
//     }
//     const char* message1 = "hello Linux\n";
//     write(fd, message1, strlen(message1));

//     const char* message2 = "hello Linux\n";
//     write(fd, message2, strlen(message2));

//     // 关闭文件描述符
//     close(fd);
//     return 0;
// }

// int main() {
//     printf("%d\n", stdin->_fileno);
//     printf("%d\n", stdout->_fileno);
//     printf("%d\n", stderr->_fileno);
//     return 0;
// }

// int main() {
//     // 关闭stdout的文件描述符
//     close(1);
//     int fd = open("log.txt", O_WRONLY | O_CREAT, 06666);
//     if (fd < 0) {
//         perror("opne");
//         return 1;
//     }

//     // 默认项标准输出打印
//     printf("fd: %d\n", fd);
//     // 指定项标准输出打印
//     fprintf(stdout,"fd: %d\n", fd);
//     // 将标准输出中的内容刷新到文件中
//     // fflush(stdout);
//     const char* msg = "xxxxx";
//     write(fd, msg, strlen(msg));

//     close(fd);
//     return 0;
// }


// int main() {
//     // 关闭stdout的文件描述符
//     int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 06666);
//     if (fd < 0) {
//         perror("opne");
//         return 1;
//     }
//     dup2(fd, 1);
//     printf("fd: %d\n", fd);
//     fprintf(stdout,"fd: %d\n", fd);
//     // 将标准输出中的内容刷新到文件中
//     fflush(stdout);

//     close(fd);
//     return 0;
// }


// int main() {
//     // C库函数
//     printf("hello printf\n");
//     fprintf(stdout, "hello fprintf\n");

//     // system call
//     const char* msg = "hello write\n";
//     write(1, msg, strlen(msg));

//     fork();
//     return 0;
// }

int main() {
    fprintf(stdout, "fprintf stdout\n");
    fprintf(stdout, "fprintf stdout\n");
    fprintf(stdout, "fprintf stdout\n");

    fprintf(stderr, "fprintf stderr\n");
    fprintf(stderr, "fprintf stderr\n");
    fprintf(stderr, "fprintf stderr\n");

    return 0;
}